﻿using DAL;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BEL
{
    public class Producto
    {

        #region atributos
        private int _productoId;
        private Categoria _categoria;
        private String _productoNombre;
        private Comercio _comercio;

        #endregion

        #region properties
        public int ProductoId
        {
            get { return _productoId; }
            set { _productoId = value; }
        }

        public String ProductoNombre
        {
            get { return _productoNombre; }
            set { _productoNombre = value; }
        }

        public Categoria Categoria
        {
            get { return _categoria; }
            set { _categoria = value; }
        }

        public Comercio Comercio
        {
            get { return _comercio; }
            set { _comercio = value; }
        }

        #endregion

        #region constructores

        public Producto(int productoId, Categoria categoria, String productoNombre, Comercio comercio)
        {
            _productoId = productoId;
            _categoria = categoria;
            _productoNombre = productoNombre;
            _comercio = comercio;
        }

        public Producto()
        {

        }

        #endregion

        #region funciones

        public static List<Producto> BuscarProductos(Comercio comercio)
        {
            List<Producto> pCollection = new List<Producto>();
            SqlDataReader dr = DALProductos.BuscarProductos(comercio.ComercioId);

            while (dr.Read())
            {
                Producto p = new Producto();
                p.ProductoId = Convert.ToInt32(dr["ProId"]);
                p.ProductoNombre = Convert.ToString(dr["ProNombre"]);
                p.Categoria = Categoria.BuscarCategoriaPorId(Convert.ToInt32(dr["CatId"]));
                p.Comercio = comercio;
                pCollection.Add(p);
            }
            dr.Close();
            return pCollection;
        }

        public static Producto BuscarProductoPorId(int productoId, Comercio comercio)
        {
            SqlDataReader dr = DALProductos.BuscarProductoPorId(productoId);
            Producto p = null;
            while (dr.Read())
            {
                p = new Producto();
                p.ProductoId = Convert.ToInt32(dr["ProId"]);
                p.ProductoNombre = Convert.ToString(dr["ProNombre"]);
                p.Categoria = Categoria.BuscarCategoriaPorId(Convert.ToInt32(dr["CatId"]));
                p.Comercio = comercio;
            }
            dr.Close();
            return p;
        }

        public List<Producto> BuscarProductosPorCategoria(int categoriaId)
        {
            return null;
        }

        public static Boolean AltaProducto(String productoNombre, int categoriaid, Comercio comercio)
        {
            DALProductos dalproducto = new DALProductos();
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@ProNombre", productoNombre));
            parametros.Add(new SqlParameter("@CatId", categoriaid));
            parametros.Add(new SqlParameter("@ComId", comercio.ComercioId));

            return dalproducto.AltaProducto(parametros);
        }

        public Boolean AltaProductosMultiples(List<Producto> lstProductos)
        {
            return false;
        }

        public static Boolean ModificarProducto(int productoId, string productoNombre, int categoriaid, Comercio comercio)
        {
            DALProductos dalproducto = new DALProductos();
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@ProId", productoId));
            parametros.Add(new SqlParameter("@ProNombre", productoNombre));
            parametros.Add(new SqlParameter("@CatId", categoriaid));
            parametros.Add(new SqlParameter("@ComId", comercio.ComercioId));

            return dalproducto.ModificarProducto(parametros);
        }


        public static Boolean BorrarProducto(int productoId)
        {
            DALProductos dalproducto = new DALProductos();
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@ProId", productoId));

            return dalproducto.BorrarProducto(parametros);
        }

        public Boolean ValidarProducto()
        {
            return false;
        }

        #endregion

    }
}
